
// 获取的是第一个元素节点的函数
function first(ele){
	var aa=ele.firstElementChild||ele.firstChild;
	if(aa && aa.nodeType==1){
		return aa;
	}else{
		return null;
	}
}
// 获取的是最后一个元素节点的函数
function last(ele){
	var aa=ele.lastElementChild||ele.lastChild;
	if(aa && aa.nodeType==1){
		return aa;
	}else{
		return null;
	}
}
// 获取的是下一个兄弟元素节点的函数
function next(ele){
	var nextnode=ele.nextElementSibling||ele.nextSibling;
	if(nextnode && nextnode.nodeType==1){
		return null;
	}else{
		return nextnode;
	}
}
// 获取的是上一个兄弟元素节点的函数
function prev(ele){
	var prevnode=ele.previousElementSibling||ele.previousSibling;
	if(prevnode && prevnode.nodeType==1){
		return prevnode;
	}else{
		return null;
	}
}

//删除文本节点
function removeTextNode(nodeList){
	var arr = [];
	for(var i=0;i<nodeList.length;i++){
		if(nodeList[i].nodeType!=3){//非文本节点
			arr.push(nodeList[i]);
		}
	}
	return arr;
}

//一个得到位置的函数(对象距浏览器最左边或最右边的距离)
function getPos(obj){
	var pos={left:0,top:0};
	while(obj){
		pos.left +=obj.offsetLeft;
		pos.top +=obj.offsetTop;
		obj=obj.offsetParent;
	}
	return pos;
}	

// 封装一个增加class名的函数
function addClassName(obj,className){
				if(className==""){
					className=className;
				}else{
					var arrClassName=obj.className.split(" ");
					var _index=arrIndex(arrClassName,className);
					if (_index==-1) {
						obj.className += " " + className;
					};
				}
}
	// 循环遍历class名的每一项，与要添加的作比较
	function arrIndex(arr,k){
		for (var i = 0; i < arr.length; i++) {
			if (arr[i]==k) {
				return i;//若有相同的，则返回数组中相同的对应的下标；
			};
		};
		return -1;
	}
// 移出其中一个class名
function removeClassName(obj,className){
	if(obj.className!==""){
		var arrClassName=obj.className.split(" ");
		var _index=arrIndex(arrClassName,className);
		if (_index!==-1) {
			arrClassName.splice(_index,1);//删除了对应那个找到的class名
			obj.className=arrClassName.join(" ");//将数组装换为字符串
		};
	}
}


//封装一个获取元素函数
function $(selector,content){
	var fristChar=selector.charAt(0);
	var content=content||document;
	if(fristChar==="#"){
		return document.getElementById(selector.slice(1));
	}else if(fristChar==="."){
		var arr=[];
		var AllElements=content.getElementsByTagName("*");
		for(var i=0;i<AllElements.length;i++){
			var className=AllElements[i].className;
			var classArr=className.split(" ");
			for(var j=0;j<classArr.length;j++){
				if(selector.slice(1)===classArr[j]){
					arr.push(AllElements[i]);
					break;
				}
			};
		};
		return arr;
	}else{
		return document.getElementsByTagName(selector);
	}
}

//简单运动函数简单运动函数(对象，方向，速度，目标位置，调回函数（可传可不传）)
function Move(obj,attr,dir,target,callBack){
	dir=  parseInt(getStyle(obj,attr))>target?-dir:dir;//判断向左还是向右
	clearInterval(obj.timer);
	obj.timer=setInterval(function(){
		var speed=parseInt(getStyle(obj,attr))+dir; //10(px)
		//与运算比或运算优先级高
		if(speed>=target&&dir>0||speed<=target&&dir<0){
			speed=target;
		}
		obj.style[attr]=speed+"px";
		if(speed==target){
			clearInterval(obj.timer);
			callBack && callBack();//如果有回调函数，则执行
		}	
	},30);
}

//获取style样式（兼容）
function getStyle(obj,attr){
	return obj.currentStyle?obj.currentStyle[attr]:getComputedStyle(obj)[attr];
}


//封装一个拖拽图片并且自由交换的函数
//封装一个拖拽函数
	function drag(obj){
		var a;//水平固定距离
		var b;//垂直固定距离
		var newObj=null;
		obj.onmousedown=function(ev){
			var e=ev || window.event;
			var aImg=document.getElementsByTagName("img")
			for(var i=0;i<aImg.length;i++){
				aImg[i].style.transition="";
				aImg[i].style.zIndex="1";
			};
			obj.style.zIndex="999";
			//阻止默认浏览器动作 兼容
			if(e.preventDefault){
				e.preventDefault();
			}else{
				e.returnValue=false;
			}
			obj.setCapture&&obj.setCapture();//获取全局捕获，得到焦点，达到取消默认行为的目的(兼容)
			var firstL=obj.offsetLeft;
			var firstT=obj.offsetTop;
			a=e.clientX-this.offsetLeft;
			b=e.clientY-this.offsetTop;
			document.onmousemove=function(ev){
				var e=ev || window.event;
				//限定图片移动范围
				var valueX=e.clientX-a;
				var valueY=e.clientY-b;
				var maxL=document.documentElement.clientWidth-obj.offsetWidth;
				var maxT=document.documentElement.clientHeight-obj.offsetHeight;
				if(valueX<0){
					valueX=0;
				}else{
					valueX=valueX;
				}
				if(valueX>maxL){
					valueX=maxL;
				}else{
					valueX=valueX;
				}
					if(valueY<0){
					valueY=0;
				}else{
					valueY=valueY;
				}
				if(valueY>maxT){
					valueY=maxT;
				}else{
					valueY=valueY;
				}
				obj.style.left=valueX+"px";
				obj.style.top=valueY+"px";							
				//碰撞检测  不限个数
				newObj=null;
				//newObj.style.border="3px solid #fff";
				var arr=[];
				for(var i=0;i<aImg.length;i++){
					if (aImg[i]!=obj) {
						if(hitTest(aImg[i],obj)){
							arr.push(aImg[i]);
						}
					} 
				};
				
				//比较离最近的是哪张图片  遍历上边的数组
				var min=Infinity;
				//alert(1)
				for(var i=0;i<arr.length;i++){
					arr[i].style.border="3px solid #fff";
					var a1=arr[i].offsetLeft-obj.offsetLeft;
					var b1=arr[i].offsetTop-obj.offsetTop;
					var value=a1*a1+b1*b1;//平方和  比较直角边大小  找出离得最近的图片
					if(min>value){
						min=value;
						newObj = arr[i];
					}
				};
				newObj.style.border="3px solid red";
				
			}
			document.onmouseup=function(){
				document.onmousemove=document.onmouseup=null;
				obj.releaseCapture&&obj.releaseCapture();//取消全局捕获
				//松开鼠标的时候交换图片
				if(newObj){
					//如果有新对象，与新对象交换位置
					obj.style.transition="0.5s";
					newObj.style.transition="0.5s";
					obj.style.left=newObj.offsetLeft+"px";
					obj.style.top=newObj.offsetTop+"px";
					newObj.style.left=firstL+"px";
					newObj.style.top=firstT+"px";
					
				}else{
					//如果没有回到初始位置
					obj.style.transition="0.5s"
					obj.style.left=firstL+"px";
					obj.style.top=firstT+"px";
					
				}
				obj.style.zIndex="1";
				for(var i=0;i<aImg.length;i++){
					aImg[i].style.border="3px solid #fff";
				};
				newObj=null;				
			}
		}
	}
	
//封装一个检测两张图片是否碰上的函数
	function hitTest(obj1,obj2){
		//获取obj1
		var obj1L=obj1.offsetLeft;
		var obj1T=obj1.offsetTop;
		var obj1W=obj1.offsetWidth;
		var obj1H=obj1.offsetHeight;
		//获取obj2
		var obj2L=obj2.offsetLeft;
		var obj2T=obj2.offsetTop;
		var obj2W=obj2.offsetWidth;
		var obj2H=obj2.offsetHeight;
		if(obj1L+obj1W<obj2L||obj1T+obj1H<obj2T||obj2L+obj2W<obj1L||obj2T+obj2H<obj1T){
			return false;
		}else{
			return true;
		}
	}
	
//封装一个设置cookie的函数
	function setCookie(key,value,time){
		var mydate=new Date;
		mydate.setDate(mydate.getDate()+time);//过期时间
		document.cookie=key+"="+encodeURI(value)+";expires="+mydate.toGMTString();
	}
//封装一个得到cookie名称的函数
	function getCookie(key){
		var str=document.cookie;
		var arr=str.split("; ");
		for(var i=0;i<arr.length;i++){
			var newArr=arr[i].split("=");
			if(newArr[0]==key){
				return decodeURI(newArr[1]);
			}
		};
	}
//封装一个删除某个cookie的函数
	function removeCookie(key){
		setCookie(key,"",-1);
	}

//比较数字之后获取最大值
function max(){
		//console.log(arguments);//arguments:  存的是实际传入参数的集合 [12,8]   [36,49]  [8,12,9,-5]
		var num=-Infinity;//无限小
		for(var i=0;i<arguments.length;i++){
			if(arguments[i]>num){
				num=arguments[i];
			}
		}
		return num;
	}


//正则判断
var objRegExp={
	"Email":/^[\w][\w-]*@[0-9a-zA-Z]{2,5}(\.[a-z]{2,3}){1,3}$/,
	"RemoveSpace":/^\s+|\s+|\s+$/g,
	"IDCard":/^[1-9]\d{16}([0-9]|X)$/,
	"qq":/^[1-9]\d{4,11}$/,
	"phone":/^1\d{10}$/
}

//封装一个运动函数  带透明度
	function startMove(obj,json,callBack){
		var MAX=20;//定义一个常量，限制最大速度，防止出现刚开始的时候运动太快;
		clearInterval(obj.timer);// 先清除定时器,防止干扰其他定时器
		obj.timer=setInterval(function(){	
			//给个开关，当开关为true的时候，全部的属性都运动完成，到达目标位置，为false的时，说明还没有全部运动完成；
			var onOff=true;
			//遍历传进来的json每个属性
			for(var attr in json){			
				var iTarget=json[attr];//声明每个属性的目标值
				if(attr=="opacity"){
					var iCur=Math.round(parseFloat(getStyle(obj,attr))*100);//iCur为当前移动的距离或位置   四舍五入   乘以100是为了和ie中的透明度保持一致
				}else{				
					var iCur=parseInt(getStyle(obj,attr));//iCur为当前移动的距离或位置 
				}
				var speed=(iTarget-iCur)/20;//iCur一直在增加，所以speed一直在减小，数字越小，运动的越慢
				//大于0的时候向上取整，是因为如果速度减小到0.1之类时，如果向下取整speed变为0，就永远到不了终点；<0时类似；
				var speedInt=speed>0?Math.ceil(speed):Math.floor(speed);
				//速度和最大值比较；
				if (Math.abs(speedInt) > MAX) speedInt = speedInt > 0 ? MAX : -MAX;
				//console.log(speedInt);		
				if(attr=="opacity"){  //透明度
					obj.style.opacity=(iCur+speedInt)/100;//乘上上边除的100
					obj.style.filter="filter:alpha(opacity="+iCur+speedInt+")";//兼容ie
				}else if(attr=="zIndex"){
					obj.style[attr]=iCur+speedInt;
				}else{
					obj.style[attr]=iCur+speedInt+"px";  //传width或left时;
				}
				//只要有一个属性没有运动完成，开关就为false
				if(iCur!=iTarget){
					onOff=false;
				}
			}
			//当所有属性运动完成的时候，清楚定时器，如果有回调函数，再执行回调函数
			if(onOff){
				clearInterval(obj.timer);
				if(callBack){
					callBack();
				}
			}		
		},20)	
	}



//封装一个ajax函数
function ajax1(options){
	var defaults={
		"method":options.method||"get",
		"url":options.url,
		"data":options.data||"",
		"successFn":options.successFn||null,
		"dataType":options.dataType	
	}
	
	var xhr=null;
	try{
		xhr=new XMLHttpRequest();//除ie6的浏览器
	}catch(e){
		xhr=new ActiveXObject("Microsoft.XMLHTTP");//兼容IE6
	}
	if(defaults.method=="get"){
		defaults.url+="?"+defaults.data;
	}
	xhr.open(defaults.method,defaults.url,true);
	if(defaults.method=="get"){
		xhr.send();
	}else{
		xhr.setRequestHeader('content-type',"application/x-www-form-urlencoded");
		xhr.send(defaults.data);
	}
	xhr.onreadystatechange=function(){
		if(xhr.readyState==4){               //ajax状态码
			if(xhr.status==200){              //服务器状态码
				var data=xhr.responseText;       
				if(defaults.dataType=="json"){
					data=JSON.parse(data);
				}
				if(defaults.dataType=="XML"){
					data=xhr.responseXML;
				}
				defaults.successFn&&defaults.successFn(data);  //回调函数，在回调函数了操作数据；
			}else{
				alert("错误：Error:"+xhr.status);
			}
			
		}
	}
	
}
//第二遍学习，封装ajax函数
function ajax(oParam) {
	var oXhr, type, sUrl, async, sBody, fn;
	type = oParam.type ? oParam.type : 'GET';
	sUrl = oParam.url  ? oParam.url  : console.log('你必须传入URL！');
	async = oParam.async ? oParam.async : true;
	sBody = oParam.body ? oParam.body : null;
	fn = oParam.fn ? oParam.fn : null;


	if(window.ActiveXObject) {
		oXhr = new window.ActiveXObject('Microsoft.XMLHTTP');
	} else {
		oXhr = new XMLHttpRequest();
	}
	
	oXhr.open(type, sUrl, async);
	oXhr.onreadystatechange = function () {
		if(oXhr.readyState == 4 && oXhr.status == 200) {
			if(fn) {
				fn(oXhr.responseText);
			}
		}
	}
	if(type.toLowerCase() == 'post') {
		oXhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	}
	oXhr.send(sBody);
}





